/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.bff.bjj.dao;

import com.bff.bjj.musicobjects.BJJAlbum;
import com.bff.bjj.musicobjects.BJJArtist;
import com.bff.bjj.musicobjects.BJJGenre;
import com.bff.bjj.musicobjects.BJJSong;
import java.util.Collection;
import org.springframework.stereotype.Component;

/**
 *
 * @author bfindeisen
 */
@Component
public interface ArtistDao {

    /**
     * Returns the total number of artists
     *
     * @return the number of artists
     * @throws BJJException if there is a problem getting the count
     */
    public int getArtistCount();    

    /**
     * Returns a {@code Collection} of {@link BJJArtist}s for a given
     * {@link BJJGenre}
     *
     * @param genre the {@link BJJGenre} to match
     * @return a {@code Collection} of {@link BJJArtist}s
     * @throws BJJDatabaseException if there is a database problem
     */
    public Collection<BJJArtist> listArtistsForGenre(BJJGenre genre);

    /**
     * Returns a {@link BJJArtist} for a {@link BJJAlbum}
     *
     * @param album
     *            the {@link BJJAlbum} to lookup
     * @return the {@link BJJArtist} for the album
     * @throws BJJDatabaseException
     *             if there is a database problem
     */
    public Collection<BJJArtist> getArtistsForAlbum(BJJAlbum album);
    /**
     * Returns a {@code Collection} of all {@link BJJArtist}s
     *
     * @return a {@code Collection} of all {@link BJJArtist}s
     */
    public Collection<BJJArtist> getArtists();
}
